package com.itheima.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import java.util.Date;

/**
 * @author zhangyan
 * @date 2021/2/20 9:00
 */

@Controller
@RequestMapping("/user")
public class UserController {
    /**
     * #### 基于Model/ModelMap
     * - 返回值：视图
     * - 设置数据：Model.addAttribute|ModelMap.addAttribute
     * - 设置视图：返回值即视图
     */
    @RequestMapping("/Model")
    public String testModel(Model model){
        model.addAttribute("nowDate",new Date());
        model.addAttribute("msg","getModel");
        return "message";
    }
    @RequestMapping("/ModelMap")
    public String testModelMap(ModelMap modelMap){
        modelMap.addAttribute("nowDate",new Date());
        modelMap.addAttribute("msg","getModelMap");
        return "message";
    }


    @RequestMapping("/sayHello1")
    public ModelAndView sayHello1(ModelAndView modelAndView) {
        /**
         * 设置模型数据
         * 相当于servlet中的request.setAttribute,数据放入请求域
         *
         * 处理器里面可以有多个使用@RequestMapping注解的方法,每个方法映射为一个HTTP接口
         * modelAndView是spring提供的数据视图对象,用于为指定视图（jsp页面）以及提供数据
         */
        modelAndView.addObject("nowDate", new Date());
        modelAndView.addObject("msg", "hello");
        /**
         * 设置视图（真实路径）
         * xml里配置视图解析器(InternalResourceViewResolver)后,不需要写全路径
         */
        modelAndView.setViewName("message");
        return modelAndView;
    }

    @RequestMapping("/sayHello2")
    public ModelAndView sayHello2(ModelAndView modelAndView) {
        /**
         * 设置模型数据
         * 相当于servlet中的request.setAttribute,数据放入请求域
         * 添加到请求域中,重定向后数据不存在了,取不到
         */
        modelAndView.addObject("nowDate", new Date());
        modelAndView.addObject("msg", "hello");

        /**
         * 设置视图
         *
         * 重定向: 添加前缀 redirect
         * 请求转发: 添加前缀 forward
         * 注意：如果添加了前缀，视图解析中配置的前缀和后缀不生效
         */
        modelAndView.setViewName("redirect:/pages/message.jsp");
        //modelAndView.setViewName("forward:/pages/message.jsp");
        return modelAndView;
    }
}